<?php
class Delivery_Model_DbTable_Productos
	extends Delivery_Model_DbTable_Desactivable

{
	protected $_name = 'productos';
	protected $_primary = 'idProducto';
	
	public function insert( $producto ){
		
		$data = $this->_fecha( $this->_getData( $producto ), true, true );
		
		$data['cantidadVendida'] = 0;
		
		return parent::insert($data);
	}
		
	public function update( $producto ){
		
		$data = $this->_fecha( $this->_getData( $producto ), false, true);
		
     	return parent::update($data, array('idProducto = ?' => $producto->idProducto));
	}
		
	public function delete( $producto ){
		return parent::delete(
			array( 'idProducto = ?' => $producto->idProducto)
		);
	}
	
	
	public function getById( $idProducto, $idNegocio = null){
		
		$select = $this->select()->where('idProducto = ?', $idProducto, Zend_Db::INT_TYPE);
		
		if ( $idNegocio!= null ){
			$select->where('idNegocio = ?', $idNegocio, Zend_Db::INT_TYPE);
		}
		
		return $this->_db->fetchRow($select);
	}
	
	public function getByIds( $ids){
		
		$ids = is_array($ids) ? $ids : explode(",", $ids);
		
		$select = $this->select()->where('idProducto IN (?)', $ids, Zend_Db::INT_TYPE);

		return $this->_db->fetchAssoc($select);
	}
	
	public function getByNegocio( $idNegocio ){
		
		$select = $this->select();
		
		if ( is_int($idNegocio) ){
			$select->where('idNegocio = ?', $idNegocio, Zend_Db::INT_TYPE);
		} else {
			$select->where('idNegocio IN (?)', $idNegocio, Zend_Db::INT_TYPE);
		}
		
		return $this->_db->fetchAssoc($select);
	}
	
	
	public function getByParams( $params, $offset = null, $limit = null, $order = null ){
		
		$select = $this->select();
		
		if ( isset($params['idNegocio'])){
			$select->where('idNegocio = ?', $params['idNegocio'], Zend_Db::INT_TYPE);
		}
		
		if ( isset($params['idCategoria'])){
			
			if ( is_int($params['idCategoria']) ){
				$select->where('idCategoria = ?', $params['idCategoria'], Zend_Db::INT_TYPE);
			} else {
				$select->where('idCategoria IN (?)', $params['idCategoria'], Zend_Db::INT_TYPE);
			}
		}
		
		if ( $order ){
			$select->order( $order );
		}
		
		if ( $limit && !is_null($offset) ){
			$select->limit( $limit, $offset );
		}
		
		return $this->_db->fetchAssoc($select);
	}
	
	public function countByParams( $params )
	{
		$select = $this->select()
				->from($this, array('count' => 'COUNT(1)'));
		
		
		if ( isset($params['idNegocio'])){
			$select->where('idNegocio = ?', $params['idNegocio'], Zend_Db::INT_TYPE);
		}
		
		if ( isset($params['idCategoria'])){
			$select->where('idCategoria = ?', $params['idCategoria'], Zend_Db::INT_TYPE);
		}
		
		$result = $this->_db->fetchRow($select);
		
		return $result['count'];
	}
	
	public function getPriceByCategory( $idCategoria, $idNegocio)
	{	
		
		$result = $this->_db->fetchRow(
			$this->select()
				->from($this, array('precio' => 'MAX(precio)'))
				->where('idNegocio = ?', $idNegocio, Zend_Db::INT_TYPE)
				->where('idCategoria = ?', $idCategoria, Zend_Db::INT_TYPE)
		);
		
		return $result['precio'];
	
	}
	
	
	protected function _getData( $producto )
	{

		$data = array (
			'nombre'				=> $producto->nombre,
   			'precio'				=> $producto->precio,
   			'cantidadDisponible'	=> $producto->cantidadDisponible,
   			'cantidadVendida'		=> $producto->cantidadVendida,
   			'idCategoria'			=> $producto->idCategoria,
			'idNegocio'				=> $producto->idNegocio,
			'descripcion'			=> $producto->descripcion,
			'codigo'				=> $producto->codigo,
			'activo'				=> $producto->activo
   		);	
		
		return $data;
	}
	
}